package com.act262.vote.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import com.act262.vote.bean.User;

/**
 * Excel 处理工具类
 */
public class ExcelUtils {
	/**
	 * 根据文件路径导入Excel文件
	 * 
	 * @param path
	 *            Excel文件的路径
	 * @return 标准Excel文件列表用户信息,保存为用户list返回
	 * @throws FileNotFoundException
	 *             文件不存在异常
	 * @throws IOException
	 *             读写错误异常
	 */
	public static List<User> getUserListFromExcel(String path)
			throws FileNotFoundException, IOException {
		List<User> userList = new ArrayList<>();
		User user = null;

		File excelFile = null;
		InputStream inputStream = null;
		String cellStr = ""; // 单元格内容

		excelFile = new File(path);
		inputStream = new FileInputStream(excelFile); // Excel文件流
		HSSFWorkbook workbook = new HSSFWorkbook(inputStream); // Excel工作簿
		HSSFSheet sheet = workbook.getSheetAt(0); // 选择工作表1

		// 遍历每一行数据,从0开始位置的,跳过处理第一行的头
		for (int i = 1, j = sheet.getLastRowNum(); i <= j; i++) {
			user = new User();
			HSSFRow row = sheet.getRow(i);
			if (null == row) {
				continue;
			}

			// 遍历这一行的列,从0开始处理
			for (int m = 0, n = row.getLastCellNum(); m < n; m++) {

				// 每列对应着一个单元格
				HSSFCell cell = row.getCell(m);
				if (null == cell) {
					cellStr = "null";
				} else {
					// 取出单元格中的内容
					cellStr = cell.getStringCellValue();
				}

				// 第0列 姓名
				switch (m) {
				case 0:
					user.setName(cellStr);
					break;

				// 第1列 密码
				case 1:
					user.setPasswd(cellStr);
					break;

				default:
					break;
				}
				// System.out.println(cellStr + " ");
			}

			userList.add(user);
			// System.out.println();
		}
		try {
			if (null != inputStream) {
				inputStream.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}

		return userList;
	}

	/**
	 * 根据文件路径导入Excel文件 从指定行位置开始读取到指定数量的数据
	 * 
	 * @param path
	 *            Excel文件的路径
	 * @param rowIndex
	 *            起始位置
	 * @param count
	 *            读取的行数
	 * @return 标准Excel文件列表用户信息,保存为用户list返回
	 * @throws FileNotFoundException
	 *             文件不存在异常
	 * @throws IOException
	 *             读写错误异常
	 */
	public static List<User> getUserListFromExcel(String path, int rowIndex,
			int count) throws FileNotFoundException, IOException {
		List<User> userList = new ArrayList<>();
		User user = null;

		File excelFile = null;
		InputStream inputStream = null;
		String cellStr = ""; // 单元格内容

		excelFile = new File(path);
		inputStream = new FileInputStream(excelFile); // Excel文件流
		HSSFWorkbook workbook = new HSSFWorkbook(inputStream); // Excel工作簿
		HSSFSheet sheet = workbook.getSheetAt(0); // 选择工作表1

		// 遍历每一行数据,从指定行位置开始,读取count行数据
		for (int i = rowIndex, j = i + count; i <= j; i++) {
			user = new User();
			HSSFRow row = sheet.getRow(i);
			if (null == row) {
				continue;
			}

			// 遍历这一行的列,从0开始处理
			for (int m = 0, n = row.getLastCellNum(); m < n; m++) {

				// 每列对应着一个单元格
				HSSFCell cell = row.getCell(m);
				if (null == cell) {
					cellStr = "null";
				} else {
					// 取出单元格中的内容
					cellStr = cell.getStringCellValue();
				}

				// 第0列 姓名
				switch (m) {
				case 0:
					user.setName(cellStr);
					break;

				// 第1列 密码
				case 1:
					user.setPasswd(cellStr);
					break;

				default:
					break;
				}
				// System.out.println(cellStr + " ");
			}

			userList.add(user);
			// System.out.println();
		}
		try {
			if (null != inputStream) {
				inputStream.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}

		return userList;
	}

	public static List<User> getUserListFromExcel(File excelFile, int rowIndex,
			int count) throws FileNotFoundException, IOException,
			IllegalStateException {
		List<User> userList = new ArrayList<>();
		User user = null;
		InputStream inputStream = null;
		String cellStr = ""; // 单元格内容

		inputStream = new FileInputStream(excelFile); // Excel文件流
		HSSFWorkbook workbook = new HSSFWorkbook(inputStream); // Excel工作簿
		HSSFSheet sheet = workbook.getSheetAt(0); // 选择工作表1

		// 遍历每一行数据,从指定行位置开始,读取count行数据
		for (int i = rowIndex, j = i + count; i <= j; i++) {
			user = new User();
			HSSFRow row = sheet.getRow(i);
			if (null == row) {
				continue;
			}

			// 遍历这一行的列,从0开始处理
			for (int m = 0, n = row.getLastCellNum(); m < n; m++) {

				// 每列对应着一个单元格
				HSSFCell cell = row.getCell(m);
				if (null == cell) {
					cellStr = "null";
				} else {
					// 取出单元格中的内容
					cellStr = cell.getStringCellValue();
				}

				// 第0列 姓名
				switch (m) {
				case 0:
					user.setName(cellStr);
					break;

				// 第1列 密码
				case 1:
					user.setPasswd(cellStr);
					break;

				default:
					break;
				}
				// System.out.println(cellStr + " ");
			}

			userList.add(user);
			// System.out.println();
		}
		try {
			if (null != inputStream) {
				inputStream.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}

		return userList;
	}
}
